home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Cross Platform / QuickTime 4.1.2 Windows SDK / CIncludes / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-12  |  9.0 KB  |  342 lines  |  [TEXT/R*ch]

  1. /*
  2.      File:        QD3DPick.h
  3.  
  4.      Contains:    Q3Pick methods                                    
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.6
  7.                  Release:    QuickTime 4.1
  8.  
  9.      Copyright:    (c) 1995-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DPICK__
  18. #define __QD3DPICK__
  19.  
  20. #ifndef __QD3D__
  21.     #include <QD3D.h>
  22. #endif
  23.  
  24.  
  25. #ifndef __QD3DSTYLE__
  26.     #include <QD3DStyle.h>
  27. #endif
  28.  
  29. #ifndef __QD3DGEOMETRY__
  30.     #include <QD3DGeometry.h>
  31. #endif
  32.  
  33.  
  34.  
  35.  
  36. #if PRAGMA_ONCE
  37. #pragma once
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT
  45. #pragma import on
  46. #endif
  47.  
  48. #if PRAGMA_STRUCT_ALIGN
  49.     #pragma options align=power
  50. #elif PRAGMA_STRUCT_PACKPUSH
  51.     #pragma pack(push, 2)
  52. #elif PRAGMA_STRUCT_PACK
  53.     #pragma pack(2)
  54. #endif
  55.  
  56. #if PRAGMA_ENUM_ALWAYSINT
  57.     #pragma enumsalwaysint on
  58. #elif PRAGMA_ENUM_OPTIONS
  59.     #pragma option enum=int
  60. #elif PRAGMA_ENUM_PACK
  61.     #if __option(pack_enums)
  62.         #define PRAGMA_ENUM_PACK__QD3DPICK__
  63.     #endif
  64.     #pragma options(!pack_enums)
  65. #endif
  66.  
  67. /*****************************************************************************
  68.  **                                                                            **
  69.  **                            Mask bits for hit information                     **
  70.  **                                                                            **
  71.  *****************************************************************************/
  72.  
  73. enum TQ3PickDetailMasks {
  74.     kQ3PickDetailNone            = 0,
  75.     kQ3PickDetailMaskPickID        = 1 << 0,
  76.     kQ3PickDetailMaskPath        = 1 << 1,
  77.     kQ3PickDetailMaskObject        = 1 << 2,
  78.     kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  79.     kQ3PickDetailMaskXYZ        = 1 << 4,
  80.     kQ3PickDetailMaskDistance    = 1 << 5,
  81.     kQ3PickDetailMaskNormal        = 1 << 6,
  82.     kQ3PickDetailMaskShapePart    = 1 << 7,
  83.     kQ3PickDetailMaskPickPart    = 1 << 8,
  84.     kQ3PickDetailMaskUV            = 1 << 9
  85. };
  86. typedef enum TQ3PickDetailMasks TQ3PickDetailMasks;
  87.  
  88. typedef unsigned long                     TQ3PickDetail;
  89. /******************************************************************************
  90.  **                                                                             **
  91.  **                                Hitlist sorting                                 **
  92.  **                                                                             **
  93.  *****************************************************************************/
  94.  
  95. enum TQ3PickSort {
  96.     kQ3PickSortNone                = 0,
  97.     kQ3PickSortNearToFar        = 1,
  98.     kQ3PickSortFarToNear        = 2
  99. };
  100. typedef enum TQ3PickSort TQ3PickSort;
  101.  
  102.  
  103. /******************************************************************************
  104.  **                                                                             **
  105.  **                    Data structures to set up the pick object                 **
  106.  **                                                                             **
  107.  *****************************************************************************/
  108. #define kQ3ReturnAllHits        0
  109.  
  110. struct TQ3PickData {
  111.     TQ3PickSort                     sort;
  112.     TQ3PickDetail                     mask;
  113.     unsigned long                     numHitsToReturn;
  114. };
  115. typedef struct TQ3PickData                TQ3PickData;
  116.  
  117. struct TQ3WindowPointPickData {
  118.     TQ3PickData                     data;
  119.     TQ3Point2D                         point;
  120.     float                             vertexTolerance;
  121.     float                             edgeTolerance;
  122. };
  123. typedef struct TQ3WindowPointPickData    TQ3WindowPointPickData;
  124.  
  125. struct TQ3WindowRectPickData {
  126.     TQ3PickData                     data;
  127.     TQ3Area                         rect;
  128. };
  129. typedef struct TQ3WindowRectPickData    TQ3WindowRectPickData;
  130.  
  131. struct TQ3WorldRayPickData {
  132.     TQ3PickData                     data;
  133.     TQ3Ray3D                         ray;
  134.     float                             vertexTolerance;
  135.     float                             edgeTolerance;
  136. };
  137. typedef struct TQ3WorldRayPickData        TQ3WorldRayPickData;
  138.  
  139. /******************************************************************************
  140.  **                                                                             **
  141.  **                                    Hit data                                 **
  142.  **                                                                             **
  143.  *****************************************************************************/
  144.  
  145. struct TQ3HitPath {
  146.     TQ3GroupObject                     rootGroup;
  147.     unsigned long                     depth;
  148.     TQ3GroupPosition *                positions;
  149. };
  150. typedef struct TQ3HitPath                TQ3HitPath;
  151. /******************************************************************************
  152.  **                                                                             **
  153.  **                                Pick class methods                             **
  154.  **                                                                             **
  155.  *****************************************************************************/
  156. EXTERN_API_C( TQ3ObjectType )
  157. Q3Pick_GetType                    (TQ3PickObject             pick);
  158.  
  159. EXTERN_API_C( TQ3Status )
  160. Q3Pick_GetData                    (TQ3PickObject             pick,
  161.                                  TQ3PickData *            data);
  162.  
  163. EXTERN_API_C( TQ3Status )
  164. Q3Pick_SetData                    (TQ3PickObject             pick,
  165.                                  const TQ3PickData *    data);
  166.  
  167. EXTERN_API_C( TQ3Status )
  168. Q3Pick_GetVertexTolerance        (TQ3PickObject             pick,
  169.                                  float *                vertexTolerance);
  170.  
  171. EXTERN_API_C( TQ3Status )
  172. Q3Pick_GetEdgeTolerance            (TQ3PickObject             pick,
  173.                                  float *                edgeTolerance);
  174.  
  175. EXTERN_API_C( TQ3Status )
  176. Q3Pick_SetVertexTolerance        (TQ3PickObject             pick,
  177.                                  float                     vertexTolerance);
  178.  
  179. EXTERN_API_C( TQ3Status )
  180. Q3Pick_SetEdgeTolerance            (TQ3PickObject             pick,
  181.                                  float                     edgeTolerance);
  182.  
  183. EXTERN_API_C( TQ3Status )
  184. Q3Pick_GetNumHits                (TQ3PickObject             pick,
  185.                                  unsigned long *        numHits);
  186.  
  187. EXTERN_API_C( TQ3Status )
  188. Q3Pick_EmptyHitList                (TQ3PickObject             pick);
  189.  
  190. EXTERN_API_C( TQ3Status )
  191. Q3Pick_GetPickDetailValidMask    (TQ3PickObject             pick,
  192.                                  unsigned long             index,
  193.                                  TQ3PickDetail *        pickDetailValidMask);
  194.  
  195. EXTERN_API_C( TQ3Status )
  196. Q3Pick_GetPickDetailData        (TQ3PickObject             pick,
  197.                                  unsigned long             index,
  198.                                  TQ3PickDetail             pickDetailValue,
  199.                                  void *                    detailData);
  200.  
  201. EXTERN_API_C( TQ3Status )
  202. Q3HitPath_EmptyData                (TQ3HitPath *            hitPath);
  203.  
  204. /******************************************************************************
  205.  **                                                                             **
  206.  **                            Window point pick methods                         **
  207.  **                                                                             **
  208.  *****************************************************************************/
  209. EXTERN_API_C( TQ3PickObject )
  210. Q3WindowPointPick_New            (const TQ3WindowPointPickData * data);
  211.  
  212. EXTERN_API_C( TQ3Status )
  213. Q3WindowPointPick_GetPoint        (TQ3PickObject             pick,
  214.                                  TQ3Point2D *            point);
  215.  
  216. EXTERN_API_C( TQ3Status )
  217. Q3WindowPointPick_SetPoint        (TQ3PickObject             pick,
  218.                                  const TQ3Point2D *        point);
  219.  
  220. EXTERN_API_C( TQ3Status )
  221. Q3WindowPointPick_GetData        (TQ3PickObject             pick,
  222.                                  TQ3WindowPointPickData * data);
  223.  
  224. EXTERN_API_C( TQ3Status )
  225. Q3WindowPointPick_SetData        (TQ3PickObject             pick,
  226.                                  const TQ3WindowPointPickData * data);
  227.  
  228.  
  229. /******************************************************************************
  230.  **                                                                             **
  231.  **                            Window rect pick methods                         **
  232.  **                                                                             **
  233.  *****************************************************************************/
  234. EXTERN_API_C( TQ3PickObject )
  235. Q3WindowRectPick_New            (const TQ3WindowRectPickData * data);
  236.  
  237. EXTERN_API_C( TQ3Status )
  238. Q3WindowRectPick_GetRect        (TQ3PickObject             pick,
  239.                                  TQ3Area *                rect);
  240.  
  241. EXTERN_API_C( TQ3Status )
  242. Q3WindowRectPick_SetRect        (TQ3PickObject             pick,
  243.                                  const TQ3Area *        rect);
  244.  
  245. EXTERN_API_C( TQ3Status )
  246. Q3WindowRectPick_GetData        (TQ3PickObject             pick,
  247.                                  TQ3WindowRectPickData * data);
  248.  
  249. EXTERN_API_C( TQ3Status )
  250. Q3WindowRectPick_SetData        (TQ3PickObject             pick,
  251.                                  const TQ3WindowRectPickData * data);
  252.  
  253.  
  254. /******************************************************************************
  255.  **                                                                             **
  256.  **                            World ray pick methods                             **
  257.  **                                                                             **
  258.  *****************************************************************************/
  259. EXTERN_API_C( TQ3PickObject )
  260. Q3WorldRayPick_New                (const TQ3WorldRayPickData * data);
  261.  
  262. EXTERN_API_C( TQ3Status )
  263. Q3WorldRayPick_GetRay            (TQ3PickObject             pick,
  264.                                  TQ3Ray3D *                ray);
  265.  
  266. EXTERN_API_C( TQ3Status )
  267. Q3WorldRayPick_SetRay            (TQ3PickObject             pick,
  268.                                  const TQ3Ray3D *        ray);
  269.  
  270. EXTERN_API_C( TQ3Status )
  271. Q3WorldRayPick_GetData            (TQ3PickObject             pick,
  272.                                  TQ3WorldRayPickData *    data);
  273.  
  274. EXTERN_API_C( TQ3Status )
  275. Q3WorldRayPick_SetData            (TQ3PickObject             pick,
  276.                                  const TQ3WorldRayPickData * data);
  277.  
  278.  
  279.  
  280. /******************************************************************************
  281.  **                                                                             **
  282.  **                                Shape Part methods                             **
  283.  **                                                                             **
  284.  *****************************************************************************/
  285. EXTERN_API_C( TQ3ObjectType )
  286. Q3ShapePart_GetType                (TQ3ShapePartObject     shapePartObject);
  287.  
  288. EXTERN_API_C( TQ3ObjectType )
  289. Q3MeshPart_GetType                (TQ3MeshPartObject         meshPartObject);
  290.  
  291. EXTERN_API_C( TQ3Status )
  292. Q3ShapePart_GetShape            (TQ3ShapePartObject     shapePartObject,
  293.                                  TQ3ShapeObject *        shapeObject);
  294.  
  295. EXTERN_API_C( TQ3Status )
  296. Q3MeshPart_GetComponent            (TQ3MeshPartObject         meshPartObject,
  297.                                  TQ3MeshComponent *        component);
  298.  
  299. EXTERN_API_C( TQ3Status )
  300. Q3MeshFacePart_GetFace            (TQ3MeshFacePartObject     meshFacePartObject,
  301.                                  TQ3MeshFace *            face);
  302.  
  303. EXTERN_API_C( TQ3Status )
  304. Q3MeshEdgePart_GetEdge            (TQ3MeshEdgePartObject     meshEdgePartObject,
  305.                                  TQ3MeshEdge *            edge);
  306.  
  307. EXTERN_API_C( TQ3Status )
  308. Q3MeshVertexPart_GetVertex        (TQ3MeshVertexPartObject  meshVertexPartObject,
  309.                                  TQ3MeshVertex *        vertex);
  310.  
  311.  
  312.  
  313.  
  314. #if PRAGMA_ENUM_ALWAYSINT
  315.     #pragma enumsalwaysint reset
  316. #elif PRAGMA_ENUM_OPTIONS
  317.     #pragma option enum=reset
  318. #elif defined(PRAGMA_ENUM_PACK__QD3DPICK__)
  319.     #pragma options(pack_enums)
  320. #endif
  321.  
  322. #if PRAGMA_STRUCT_ALIGN
  323.     #pragma options align=reset
  324. #elif PRAGMA_STRUCT_PACKPUSH
  325.     #pragma pack(pop)
  326. #elif PRAGMA_STRUCT_PACK
  327.     #pragma pack()
  328. #endif
  329.  
  330. #ifdef PRAGMA_IMPORT_OFF
  331. #pragma import off
  332. #elif PRAGMA_IMPORT
  333. #pragma import reset
  334. #endif
  335.  
  336. #ifdef __cplusplus
  337. }
  338. #endif
  339.  
  340. #endif /* __QD3DPICK__ */
  341.  
  342.